package org.algorithm.biubiu.wheel_1.DFS算法;

/**
 二维矩阵 grid 由 0 （土地）和 1 （水）组成。岛是由最大的4个方向连通的 0 组成的群，封闭岛是一个 完全 由1包围（左、上、右、下）的岛。

 请返回 封闭岛屿 的数目。



 来源：力扣（LeetCode）
 链接：https://leetcode.cn/problems/number-of-closed-islands
 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class $5月6日$统计封闭岛屿的数目 {


    public int closedIsland(int[][] grid) {
        int res = 0;
        if(grid==null||grid.length==0){
            return res;
        }
        int row = grid.length;
        int col = grid[0].length;
        // 处理上下
        for(int i = 0;i<row;i++){
            dfs(grid,i,0);
            dfs(grid,i,col-1);
        }

        // 处理左右-col 左右
        for(int i = 0;i<col;i++){
            dfs(grid,0,i);
            dfs(grid,row-1,i);
        }
        //遍历统计 0的数量
        for(int i = 0;i<row;i++){
            for(int j = 0;j<col;j++){
                if(grid[i][j]==0){
                    res++;
                    dfs(grid,i,j);

                }
            }
        }
        return res;
    }

    public void dfs(int[][]grid,int i,int j){
        int row = grid.length;
        int col = grid[0].length;
        if(i<0||j<0 || i>=row ||j>=col || grid[i][j]==1){
            return;
        }
        grid[i][j] = 1;
        //上下左右遍历
        dfs(grid,i+1,j);
        dfs(grid,i-1,j);
        dfs(grid,i,j-1);
        dfs(grid,i,j+1);
        return ;

    }
}
